#ifndef CONFIG_PW_PBL_COROUTINE_HPP
#define CONFIG_PW_PBL_COROUTINE_HPP

#include "../Coroutine/QueueExecutor.hpp"

namespace pw_pbl::co
{
	/// 协程自定义等待器模板类，本库协程中当co_await使用await_transform转换时首先尝试Await(obj)自动推导并转换
	/// @note 用户可添加推导指南和特化此模板类以实现特定的等待器
	/// 例如，通常使用特化模板来实现将std::chrono::duration转换为等待延时，以实现co_await 10ms;这样直观的表达式
	template <typename... T>
	struct Awaitor;

	template <typename T>
	Awaitor(T &&) -> Awaitor<T>;

	/// 各协程类的promise_type的注入基类，通常用于添加自定义内存分配operator new和operator delete
	template <typename T>
	using InjectedPromiseBase = std::tuple<>;

	/// 协程是否使用thread_local实例配置项
	inline constexpr bool using_thread_local_executor = false;

	using Executor = QueueExecutor;
} // namespace pw_pbl::co

#endif // CONFIG_PW_PBL_COROUTINE_HPP
